<template>
  <div class="home-page">
    <div class="header">
      <TopNav />
    </div>
    <div class="main-content">
      <div class="content-area">
        <router-view />
      </div>
    </div>
  </div>
</template>

<script>
import TopNav from '@/components/homepage/top-nav.vue';
import { mapState, mapActions, mapGetters } from 'vuex';

export default {
  name: 'HomePage',
  components: {
    TopNav
  },
  data() {
    return {
      currentSchool: '经开二中',
      // 添加标志变量，防止弹窗重复显示
      initDialogShown: false
    };
  },
  computed: {
    ...mapState('school', ['schoolId', 'schoolList']),
    ...mapState('user', ['userInfo']),
    
    // 获取当前学校信息
    schoolInfo() {
      if (!this.schoolId || !this.schoolList) return null;
      return this.schoolList.find(school => school.F_id === this.schoolId) || null;
    },
    
    // 判断当前用户是否为学校管理员
    isSchoolAdmin() {
      if (!this.userInfo) return false;
      
      console.log('isSchoolAdmin计算: 用户信息', this.userInfo);
      
      // 扩展判断条件
      // 用户类型判断
      const { role, utype } = this.userInfo;
      
      // 角色名称判断，更全面地匹配可能的学校管理员角色名称
      const adminRoleNames = ['校长', '学校管理员', '校务管理员', '副校长', '教务主任'];
      const isAdminByRole = adminRoleNames.some(name => role && role.includes(name));
      
      // 用户类型判断，学校管理员通常utype为8或4
      const isAdminByType = utype === 8 || utype === 4;
      
      const isAdmin = isAdminByRole || isAdminByType;
      console.log('isSchoolAdmin计算结果:', isAdmin, '角色匹配:', isAdminByRole, '类型匹配:', isAdminByType);
      
      // 返回实际的管理员检测结果
      return isAdmin;
    }
  },
  watch: {
  },
  methods: {
    ...mapActions('school', ['GET_SCHOOL_LIST', 'GET_SCHOOL_OPTIONS']),
    
    // 初始化学校数据
    async initSchoolData() {
      try {
        console.log('初始化学校数据: 开始');
        console.log('当前schoolId:', this.schoolId);
        console.log('学校列表:', this.schoolList);
        
        // 从学校列表获取第一所学校的ID（如果尚未设置）
        if (!this.schoolId && this.schoolList && this.schoolList.length > 0) {
          this.schoolId = this.schoolList[0].F_id;
          console.log('设置schoolId为第一所学校:', this.schoolId);
        }
        
        // 确保有学校ID才获取学校选项
        if (this.schoolId) {
          console.log('获取学校选项，schoolId:', this.schoolId);
          await this.GET_SCHOOL_OPTIONS({
            school_id: this.schoolId
          });
          console.log('学校选项获取完成');
        } else {
          console.warn('没有可用的学校ID，跳过获取学校选项');
        }
      } catch (error) {
        console.error('初始化学校数据失败', error);
      }
    },
    
    // 检查学校数据初始化状态
    async checkSchoolDataInitStatus() {
      try {
        // 增加延迟确保用户信息和学校ID已加载完成
        await new Promise(resolve => setTimeout(resolve, 1000));
        
        // 调试信息
        console.log('checkSchoolDataInitStatus: 开始检查学校数据初始化状态');
        console.log('checkSchoolDataInitStatus: 用户信息', this.userInfo);
        console.log('checkSchoolDataInitStatus: 是否为管理员', this.isSchoolAdmin);
        
        // 从state获取当前schoolId
        const currentSchoolId = this.$store.state.school.currentSchoolId;
        console.log('checkSchoolDataInitStatus: 当前currentSchoolId', currentSchoolId);
        
        // 只有学校管理员才需要检查数据初始化状态
        if (!this.isSchoolAdmin) {
          console.log('非学校管理员账号，跳过数据初始化检查');
          return;
        }
        
        if (!currentSchoolId) {
          console.log('没有可用的学校ID，跳过数据初始化检查');
          return;
        }
        
        // 通过检查班级数据来判断学校是否已初始化
        try {
          // 调用班级API，检查是否有班级数据
          const { F_responseNo, F_total, F_rows } = await this.$api.getClasses({
            F_school_id: currentSchoolId,
            page: 1,
            rows: 10
          });
          
          console.log('checkSchoolDataInitStatus: 获取班级数据结果', { F_responseNo, F_total, rows: F_rows?.length });
          
          // 如果学校没有班级数据（F_total为0或F_rows为空数组），则认为学校数据未初始化
          if (F_responseNo === 10000 && F_total === 0) {
            console.log('检测到学校没有班级数据，认为未初始化');
            this.showInitConfirmDialog(currentSchoolId);
          } else {
            console.log('学校已有班级数据，无需初始化');
          }
        } catch (error) {
          console.error('获取班级数据失败:', error);
          // 发生错误时也显示初始化提示
          this.showInitConfirmDialog(currentSchoolId);
        }
      } catch (error) {
        console.error('检查学校数据初始化状态失败:', error);
      }
    },
    
    // 显示初始化确认弹窗
    showInitConfirmDialog(schoolId) {
      // 如果弹窗已经显示过，则不再显示
      if (this.initDialogShown) {
        console.log('初始化弹窗已经显示过，不再重复显示');
        return;
      }
      
      // 标记弹窗已显示
      this.initDialogShown = true;
      
      console.log('显示初始化确认弹窗');
      try {
        this.$EleMessageBox.confirm(
          '检测到您的学校数据尚未初始化，是否立即导入基础数据？',
          '数据初始化提示',
          {
            confirmButtonText: '立即导入',
            cancelButtonText: '稍后导入',
            type: 'warning'
          }
        ).then(() => {
          // 使用现有的导入功能进行数据初始化
          console.log('用户点击立即导入，当前schoolId:', schoolId);
          this.$import(schoolId, this.$maps.importType.SCHOOL, () => {
            this.$message({
              type: 'success',
              message: '数据初始化成功!'
            });
          });
        }).catch((err) => {
          console.log('用户取消导入', err);
          this.$message({
            type: 'info',
            message: '您可以稍后在学校管理页面中的"导入师生"按钮进行数据初始化'
          });
        });
      } catch (error) {
        console.error('显示确认弹窗失败:', error);
        // 使用原生alert作为备选
        if (confirm('检测到您的学校数据尚未初始化，是否立即导入基础数据？')) {
          this.$import(schoolId, this.$maps.importType.SCHOOL, () => {
            alert('数据初始化成功!');
          });
        } else {
          alert('您可以稍后在学校管理页面中的"导入师生"按钮进行数据初始化');
        }
      }
    },
    
    // 测试初始化弹窗
    testInitDialog() {
      // 重置弹窗显示标志，允许再次测试
      this.initDialogShown = false;
      
      const currentSchoolId = this.$store.state.school.currentSchoolId;
      if (currentSchoolId) {
        this.showInitConfirmDialog(currentSchoolId);
      } else {
        alert('没有可用的学校ID，请先选择学校');
      }
    }
  },
  async created() {
    console.log('HomePage: 组件创建开始');
    console.log('HomePage: 用户信息', this.userInfo);
    console.log('HomePage: 是否为管理员', this.isSchoolAdmin);
    
    // 初始化学校数据
    try {
      console.log('HomePage: 开始获取学校列表');
      await this.GET_SCHOOL_LIST();
      console.log('HomePage: 学校列表获取完成', this.schoolList);
      
      // 确保在获取到学校列表后再初始化学校数据
      await this.initSchoolData();
      await this.checkSchoolDataInitStatus();
      console.log('HomePage: 学校数据初始化完成');
    } catch (error) {
      console.error('HomePage: 初始化学校数据失败', error);
    }
    
    console.log('HomePage: 组件创建完成');
  },
  
  // 添加mounted钩子，确保DOM已挂载并且用户信息已完全加载
  mounted() {
    console.log('HomePage: 组件已挂载');
    // 延长等待时间，确保所有数据都已加载完成
    setTimeout(async () => {
      console.log('延时检查：重新检查学校数据初始化状态');
      const currentSchoolId = this.$store.state.school.currentSchoolId;
      console.log('延时检查：当前currentSchoolId', currentSchoolId);
      
      // 如果currentSchoolId仍未定义，尝试重新获取学校列表并设置schoolId
      if (!currentSchoolId) {
        console.log('延时检查：currentSchoolId未定义，重新获取学校列表');
        try {
          await this.GET_SCHOOL_LIST();
          console.log('延时检查：学校列表', this.schoolList);
          
          if (this.schoolList && this.schoolList.length > 0) {
            // 从Vuex获取第一个学校ID
            const firstSchoolId = this.schoolList[0].F_id;
            console.log('延时检查：设置schoolId为第一所学校', firstSchoolId);
            
            // 手动设置当前学校ID，使用正确的action名称
            await this.$store.dispatch('school/SET_CURRENT_SCHOOL', firstSchoolId);
            console.log('延时检查：currentSchoolId已设置为', this.$store.state.school.currentSchoolId);
          }
        } catch (error) {
          console.error('延时检查：获取学校列表失败', error);
        }
      }
      
      // 再次获取并检查currentSchoolId是否已设置
      const updatedSchoolId = this.$store.state.school.currentSchoolId;
      if (updatedSchoolId) {
        this.checkSchoolDataInitStatus();
      } else {
        console.error('无法获取有效的学校ID，无法检查数据初始化状态');
      }
    }, 2500);
  }
};
</script>

<style lang="less" scoped>
.home-page {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  background-color: #f9fafd;
}

.header {
  width: 100%;
  height: 60px;
  flex-shrink: 0;
}

.main-content {
  flex: 1;
  display: flex;
  overflow: hidden;
  background-color: #f9fafd;
}

.content-area {
  flex: 1;
  height: 100%;
  overflow: auto;
  padding: 10px;
  background-color: #f9fafd; /* 整体底色为浅灰色 */
}
</style>
